#include <iostream>
using namespace std;

const int N = 1e5 + 10;
int a[N];
int n;
int dp[N];
int f[N];
//dp[i] : 表示到i位置最少能分多少块,上升
//dp[i] = dp[i - 1]  ->  (a[i - 2] < a[i - 1] && a[i - 1]  < a[i])
//dp[i] = 
//f[i] :  表示到i位置最少能分多少块,下降

int main() {
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        cin >> a[i];
    }
    dp[1] = 1;
    f[1] = 1;
    for(int i = 2;i <= n;i++)
    {
        if(a[i] == a[i-1])
        {
            f[i] = f[i-1];
            dp[i] = dp[i-1];
        }
        else if(a[i] > a[i - 1])
        {
            dp[i] = min(dp[i - 1],f[i - 1] + 1);
            f[i] = f[i - 1] + 1;
        }
        else
        {
            f[i] = min(f[i - 1],dp[i - 1] + 1);
            dp[i] = dp[i - 1] + 1;
        }
    }
    cout << min(dp[n],f[n]) << endl;
    
    

    return 0;
}
// 64 位输出请用 printf("%lld")